// Engine.h (c) 2011 JV Software
//

#pragma warning(disable : 4996)

// ---------------------
#ifdef _WIN32
#include <windows.h>
#include <fstream>
#endif

#include <string>
#include <vector>
// ---------------------

#ifndef ENGINE_API
	#ifdef SYS_API
		#define ENGINE_API		
	#else
		#define ENGINE_API		__declspec(dllimport)	
	#endif
#endif

#define JINLINE __forceinline 

// ---------------------

// -----------------
#include "FObject.h"
// jv - this is just bad programming
#ifndef SYS_API
#include "FMemoryManager.h"
#endif
// jv end

#include "FString.h"
#include "FArray.h"
#include "FWindow.h"
#include "FGraphicsDevice.h"
#include "FTexture.h"
#include "FModule.h"
#include "FSystem.h"
#include "FFilesystem.h"
#include "FImageManager.h"
#include "FEffect.h"
#include "FMaterialManager.h"
// -----------------


//
// Engine
//
class ENGINE_API Engine {
public:
							// Init the engine.
	virtual void			Init( void *hinstance, FString cmdline );
							// Shutdown the engine.
	virtual void			Shutdown( void );
							// Called once per-frame.
	virtual void			Frame();
							// Print a message to the log.
	virtual void			Printf( FString msg, ... );
							// Prints a warning message to the log.
	virtual void			Warning( FString msg, ... );
							// Fatal error, crashes the game.
	virtual void			FatalError( FString msg, ... );
private:
	FWindow					*gameWindow;
};

extern ENGINE_API FGraphicsDevice *graphicsDevice;
extern ENGINE_API Engine	*engine;

